home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xmcd-1.4 / libdi.d / vu_hita.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-10  |  7.4 KB  |  236 lines

  1. /*
  2.  *   libdi - CD Audio Player Device Interface Library
  3.  *
  4.  *   Copyright (C) 1995  Ti Kan
  5.  *   E-mail: ti@amb.org
  6.  *
  7.  *   This program is free software; you can redistribute it and/or modify
  8.  *   it under the terms of the GNU General Public License as published by
  9.  *   the Free Software Foundation; either version 2 of the License, or
  10.  *   (at your option) any later version.
  11.  *
  12.  *   This program is distributed in the hope that it will be useful,
  13.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *   GNU General Public License for more details.
  16.  *
  17.  *   You should have received a copy of the GNU General Public License
  18.  *   along with this program; if not, write to the Free Software
  19.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  *   The name "Hitachi" is a trademark of Hitachi Corporation, and is
  22.  *   used here for identification purposes only.  This software and its
  23.  *   author are not affiliated in any way with Hitachi.
  24.  *
  25.  */
  26. #ifndef __VU_HITA_H__
  27. #define __VU_HITA_H__
  28.  
  29. #ifdef VENDOR_HITACHI
  30.  
  31. #ifndef LINT
  32. static char *_vu_hita_h_ident_ = "@(#)vu_hita.h    5.2 94/12/28";
  33. #endif
  34.  
  35.  
  36. /* Hitachi vendor-unique commands */
  37. #define OP_VH_AUDPLAY        0xe0    /* Hitachi play audio */
  38. #define OP_VH_PAUSE        0xe1    /* Hitachi pause */
  39. #define OP_VH_PLAYTRK        0xe2    /* Hitachi play audio track */
  40. #define OP_VH_RDINFO        0xe3    /* Hitachi read disk info */
  41. #define OP_VH_EJECT        0xe4    /* Hitachi eject */
  42. #define OP_VH_RDSTAT        0xe5    /* Hitachi read audio status */
  43. #define OP_VH_PWRSAVE        0xe6    /* Hitachi power save mode */
  44. #define OP_VH_RDXINFO        0xe8    /* Hitachi read extended disk info */
  45.  
  46.  
  47. /* Return data lengths */
  48. #define SZ_VH_PAUSE        3    /* Hitachi pause data size */
  49. #define SZ_VH_RDINFO        303    /* Hitachi disk info data size */
  50. #define SZ_VH_TOCHDR        3    /* Hitachi disc info header size */
  51. #define SZ_VH_TOCENT        3    /* Hitachi disc info per-track
  52.                      * entry size
  53.                      */
  54. #define SZ_VH_RDSTAT        11    /* Hitachi audio status data size */
  55. #define SZ_VH_RDXINFO        404    /* Hitachi ext disk info data size */
  56. #define SZ_VH_XTOCHDR        4    /* Hitachi ext disc info header size */
  57. #define SZ_VH_XTOCENT        4    /* Hitachi ext disc info per-track
  58.                      * entry size
  59.                      */
  60.  
  61.  
  62. /* Hitachi MSF location */
  63. typedef struct hmsf {
  64. #if _BYTE_ORDER_ == _L_ENDIAN_
  65.     unsigned int    min:7;            /* minute */
  66.     unsigned int    data:1;            /* 0=audio 1=data */
  67. #else    /* _BYTE_ORDER_ == _B_ENDIAN_ */
  68.     unsigned int    data:1;            /* 0=audio 1=data */
  69.     unsigned int    min:7;            /* minute */
  70. #endif    /* _BYTE_ORDER_ */
  71.     unsigned int    sec:8;            /* second */
  72.     unsigned int    frame:8;        /* frame */
  73.     unsigned int    res:8;            /* reserved */
  74. } hmsf_t;
  75.  
  76.  
  77. /* Hitachi extended MSF location */
  78. typedef struct hxmsf {
  79. #if _BYTE_ORDER_ == _L_ENDIAN_
  80.     unsigned int    adr:4;            /* ADR code */
  81.         unsigned int    preemph:1;        /* preemphasis */
  82.     unsigned int    copyallow:1;        /* digital copy allow */
  83.     unsigned int    trktype:1;        /* 0=audio 1=data */
  84.     unsigned int    audioch:1;        /* 0=2ch 1=4ch */
  85. #else    /* _BYTE_ORDER_ == _B_ENDIAN_ */
  86.     unsigned int    audioch:1;        /* 0=2ch 1=4ch */
  87.     unsigned int    trktype:1;        /* 0=audio 1=data */
  88.     unsigned int    copyallow:1;        /* digital copy allow */
  89.         unsigned int    preemph:1;        /* preemphasis */
  90.     unsigned int    adr:4;            /* ADR code */
  91. #endif    /* _BYTE_ORDER_ */
  92.     unsigned int    min:8;            /* minute */
  93.     unsigned int    sec:8;            /* second */
  94.     unsigned int    frame:8;        /* frame */
  95. } hxmsf_t;
  96.  
  97.  
  98. /* Hitachi Disk Info data */
  99. typedef struct hdiscinfo {
  100.     unsigned int    pad0:8;            /* pad byte for alignment */
  101. #if _BYTE_ORDER_ == _L_ENDIAN_
  102.     unsigned int    audio:1;        /* disc has audio tracks */
  103.     unsigned int    data:1;            /* disc has data tracks */
  104.     unsigned int    res:6;            /* reserved */
  105. #else    /* _BYTE_ORDER_ == _B_ENDIAN_ */
  106.     unsigned int    res:6;            /* reserved */
  107.     unsigned int    data:1;            /* disc has data tracks */
  108.     unsigned int    audio:1;        /* disc has audio tracks */
  109. #endif    /* _BYTE_ORDER_ */
  110.     unsigned int    first_trk:8;        /* first track number */
  111.     unsigned int    last_trk:8;        /* last track number */
  112.  
  113.     byte_t        msfdata[300];        /* Track MSF address data */
  114. } hdiscinfo_t;
  115.  
  116.  
  117. /* Hitachi Audio Status data */
  118. typedef struct haudstat {
  119. #if _BYTE_ORDER_ == _L_ENDIAN_
  120.     unsigned int    playing:1;        /* Audio playing */
  121.     unsigned int    res1:7;            /* Reserved */
  122.     unsigned int    adr:4;            /* ADR code */
  123.         unsigned int    preemph:1;        /* preemphasis */
  124.     unsigned int    copyallow:1;        /* digital copy allow */
  125.     unsigned int    trktype:1;        /* 0=audio 1=data */
  126.     unsigned int    audioch:1;        /* 0=2ch 1=4ch */
  127. #else    /* _BYTE_ORDER_ == _B_ENDIAN_ */
  128.     unsigned int    res1:7;            /* Reserved */
  129.     unsigned int    playing:1;        /* Audio playing */
  130.     unsigned int    audioch:1;        /* 0=2ch 1=4ch */
  131.     unsigned int    trktype:1;        /* 0=audio 1=data */
  132.     unsigned int    copyallow:1;        /* digital copy allow */
  133.         unsigned int    preemph:1;        /* preemphasis */
  134.     unsigned int    adr:4;            /* ADR code */
  135. #endif    /* _BYTE_ORDER_ */
  136.     unsigned int    trkno:8;        /* track number */
  137.     unsigned int    res2:8;            /* reserved */
  138.  
  139.     hmsf_t        rel_addr;        /* relative address */
  140.     hmsf_t        abs_addr;        /* absolute address */
  141. } haudstat_t;
  142.  
  143.  
  144. /* Hitachi Extended Disk Info data */
  145. typedef struct hxdiscinfo {
  146.     byte_t        res[2];            /* reserved */
  147.     byte_t        first_trk;        /* first track number */
  148.     byte_t        last_trk;        /* last track number */
  149.  
  150.     byte_t        xmsfdata[400];        /* track MSF address data */
  151. } hxdiscinfo_t;
  152.  
  153.  
  154. /* Argument for the Hitachi play audio and Hitachi play audio by track
  155.  * commands.
  156.  */
  157. typedef struct haudio_arg {
  158.     union {
  159. #if _BYTE_ORDER_ == _L_ENDIAN_
  160.         struct {
  161.             byte_t    res;        /* reserved */
  162.             byte_t    frame;        /* frame */
  163.             byte_t    sec;        /* seconds */
  164.             byte_t    min;        /* minutes */
  165.         } startmsf;            /* OP_VH_AUDPLAY start */
  166.         struct {
  167.             byte_t    frame;        /* frame */
  168.             byte_t    sec;        /* seconds */
  169.             byte_t    min;        /* minutes */
  170.             byte_t    res;        /* reserved */
  171.         } endmsf;            /* OP_VH_AUDPLAY end */
  172.         struct {
  173.             byte_t    res[3];        /* reserved */
  174.             byte_t    track;        /* track number */
  175.         } starttrk;            /* OP_VH_PLAYTRK start */
  176.         struct {
  177.             byte_t    res1[2];    /* reserved */
  178.             byte_t    track;        /* track number */
  179.             byte_t    res2;        /* reserved */
  180.         } endtrk;            /* OP_VH_PLAYTRK end */
  181. #else    /* _BYTE_ORDER_ == _B_ENDIAN_ */
  182.         struct {
  183.             byte_t    min;        /* minutes */
  184.             byte_t    sec;        /* seconds */
  185.             byte_t    frame;        /* frame */
  186.             byte_t    res;        /* reserved */
  187.         } startmsf;            /* OP_VH_AUDPLAY start */
  188.         struct {
  189.             byte_t    res;        /* reserved */
  190.             byte_t    min;        /* minutes */
  191.             byte_t    sec;        /* seconds */
  192.             byte_t    frame;        /* frame */
  193.         } endmsf;            /* OP_VH_AUDPLAY end */
  194.         struct {
  195.             byte_t    track;        /* track number */
  196.             byte_t    res[3];        /* reserved */
  197.         } starttrk;            /* OP_VH_PLAYTRK start */
  198.         struct {
  199.             byte_t    res2;        /* reserved */
  200.             byte_t    track;        /* track number */
  201.             byte_t    res1[2];    /* reserved */
  202.         } endtrk;            /* OP_VH_PLAYTRK end */
  203. #endif    /* _BYTE_ORDER_ */
  204.     } _addr;
  205. } haudio_arg_t;
  206.  
  207. #define addr_smin    _addr.startmsf.min
  208. #define addr_ssec    _addr.startmsf.sec
  209. #define addr_sframe    _addr.startmsf.frame
  210. #define addr_emin    _addr.endmsf.min
  211. #define addr_esec    _addr.endmsf.sec
  212. #define addr_eframe    _addr.endmsf.frame
  213. #define addr_strk    _addr.starttrk.track
  214. #define addr_etrk    _addr.endtrk.track
  215.  
  216.  
  217. /* Public function prototypes */
  218. extern bool_t    hita_playaudio(byte_t, word32_t, word32_t, msf_t *, msf_t *,
  219.             byte_t, byte_t);
  220. extern bool_t    hita_pause_resume(bool_t);
  221. extern bool_t    hita_start_stop(bool_t, bool_t);
  222. extern bool_t    hita_get_playstatus(curstat_t *, byte_t *);
  223. extern bool_t    hita_get_toc(curstat_t *);
  224. extern bool_t    hita_mute(bool_t);
  225. extern bool_t    hita_eject(void);
  226. extern void    hita_init(void);
  227.  
  228. #else
  229.  
  230. #define hita_init    NULL
  231.  
  232. #endif    /* VENDOR_HITACHI */
  233.  
  234. #endif    /* __VU_HITA_H__ */
  235.  
  236.